package com.dyylearn.servlet.annotation;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 注解方式来配置
 */

/**
 * 1.@WebServlet 是一个注解=>java基础->注解
 * 2.@WebServlet 源码
 * @Target({ElementType.TYPE})
 * @Retention(RetentionPolicy.RUNTIME)
 * @Documented => 在javadoc工具生成文档会有记录
 * public @interface WebServlet {
 *     String name() default "";
 *
 *     String[] value() default {};
 *
 *     String[] urlPatterns() default {};
 *
 *     int loadOnStartup() default -1;
 *
 *     WebInitParam[] initParams() default {};
 *
 *     boolean asyncSupported() default false;
 *
 *     String smallIcon() default "";
 *
 *     String largeIcon() default "";
 * 3. urlPatterns 对应 web.xml 的 <url-pattern></url-pattern>
 * 4.  {"/ok1", "/ok2"} 可以给OkServlet配置多个 url-pattern
 * 5.相当于这个@WebServlet(urlPatterns = {"/ok1", "/ok2"}) 代替了 web.xml的配置
 *      底层使用了 反射+注解+IO+集合 来完成一个支撑
 * 6.浏览器可以这样访问OkServlet时，可以 http://localhost:8080/servlet_review/ok1
 *   或者 http://localhost:8080/servlet_review/ok1
 * 7.我们可以根据 @interface WebServlet源码知道可以配置哪些
 * 8.注解方式开发Servlet和web.xml配置servlet流程是一样的
 * web.xml init-param 在注解中，如何指定呢
 *         <init-param>
 *             <param-name></param-name>
 *             <param-value></param-value>
 *         </init-param>
 */
@WebServlet(urlPatterns = {"/ok1", "/ok2"}, initParams = {@WebInitParam(name = "xx", value = "yy"), @WebInitParam(name = "xx", value = "yy")})
public class OkServlet extends HttpServlet {

    @Override
    public void init() throws ServletException {
        System.out.println("注解方式被 OkServlet init() 被调用");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("注解方式 OKServlet doPost()");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("注解方式 OKServlet doGet()");
    }
}
